package cn.tedu.store.product.service;

import cn.tedu.store.commons.pojo.product.dto.BrandAddNewDTO;
import cn.tedu.store.commons.pojo.product.dto.BrandUpdateDTO;
import cn.tedu.store.commons.pojo.product.vo.BrandListItemVO;
import cn.tedu.store.commons.pojo.product.vo.BrandStandardVO;
import cn.tedu.store.commons.web.JsonPage;
import org.springframework.transaction.annotation.Transactional;


/**
 * 品牌业务功能接口
 *
 * @author RelentlessFlow
 * @version 0.0.1
 */
@Transactional
public interface IBrandService {

    /**
     * 添加品牌
     *
     * @param brandAddNewDTO 品牌数据
     */
    void addNew(BrandAddNewDTO brandAddNewDTO);

    /**
     * 根据品牌id，删除品牌数据
     *
     * @param id 尝试删除的品牌的id
     */
    void delete(Long id);

    /**
     * 启用品牌
     * @param id 品牌id
     */
    void setEnable(Long id);

    /**
     * 禁用品牌
     * @param id 品牌id
     */
    void setDisable(Long id);

    /**
     * 首页推荐品牌
     * @param id 品牌id
     */
    void setRecommend(Long id);

    /**
     * 不推荐品牌
     * @param id 品牌id
     */
    void setNotRecommend(Long id);

    /**
     * 修改品牌信息
     * @param id 品牌id
     * @param brandUpdateDTO 要修改的品牌信息
     */
    void updateById(Long id, BrandUpdateDTO brandUpdateDTO);


    /**
     * 根据id查询品牌详情
     * @param id 品牌id
     * @return 品牌详情
     */
    BrandStandardVO getStandardById(Long id);

    /**
     * 查询品牌列表
     *
     * @return 品牌列表，如果没有匹配的品牌，将返回长度为0的列表
     */
    JsonPage<BrandListItemVO> list(Integer pageNum, Integer pageSize);

    /**
     * 查询推荐品牌列表
     *
     * @param pageNum 页码
     * @param pageSize 单页元素数量
     * @return 品牌列表，如果没有匹配的品牌，将返回长度为0的列表
     */
    JsonPage<BrandListItemVO> recommendList(Integer pageNum, Integer pageSize);

    /**
     * 重建品牌缓存
     */
    void rebuildCache();

}
